From ca000b758456baeecbbb7d635a2442cf906db8d2 Mon Sep 17 00:00:00 2001 From: Robert Lipe Date: Fri, 16 Apr 2021 20:15:29 -0500 Subject: [PATCH] Minorfixes to "new" gtm_stringread() functions to eliminate leading and trailing spaces (#710) * Trim more uses of C date and potentially unsafe memory practices. * Add warning fixes for garmin_xt and exif --- dmtlog.cc | 30 ++++++++++-------------------- exif.cc | 4 ++-- garmin_xt.cc | 4 ++-- gtm.cc | 27 ++------------------------- vitosmt.cc | 24 ++++++++---------------- 5 files changed, 24 insertions(+), 65 deletions(-) diff --git a/dmtlog.cc b/dmtlog.cc index 3b5597598..7c338d5b0 100644 --- a/dmtlog.cc +++ b/dmtlog.cc @@ -33,6 +33,7 @@ #include "defs.h" #include "gbfile.h" // for gbfgetdbl, gbfgetint32, gbfputint32, gbfgetint16, gbfputdbl, gbfputc, gbfread, gbfseek, gbfgetc, gbfile, gbfclose, gbfungetc, gbfeof, gbfputs, gbfwrite, gbfopen_le, gbfgetuint32, gbfputuint16, gbfputuint32 #include "jeeps/gpsmath.h" // for GPS_Lookup_Datum_Index, GPS_Math_Known_Datum_To_WGS84_C, GPS_Math_NGENToAiry1830LatLon +#include "src/core/logging.h" // for FatalMsg #include "xmlgeneric.h" // for cb_cdata, xg_callback, xg_string, xml_deinit, xml_init, cb_end, cb_start, xg_cb_type, xml_read, xml_readstring, xg_tag_mapping @@ -329,7 +330,7 @@ tlog3b_xgcb_wpten(xg_string, const QXmlStreamAttributes*) } -static char* +static QString read_str(gbfile* f) { int i = gbfgetc(f); @@ -337,13 +338,7 @@ read_str(gbfile* f) i = gbfgetint16(f); } - char* res = (char*) xmalloc(i + 1); - res[i] = '\0'; - if (i) { - gbfread(res, 1, i, f); - } - - return res; + return gbfreadbuf(i, f); } static void @@ -380,17 +375,14 @@ write_str(const QString& str, gbfile* f) static int read_datum(gbfile* f) { - char* d = read_str(f); - char* g = read_str(f); + auto d = read_str(f); + auto g = read_str(f); int res = GPS_Lookup_Datum_Index(d); - if (*g && (strcmp(d, g) != 0)) { - fatal(MYNAME ": Unsupported combination of datum '%s' and grid '%s'!\n", - d, g); + if (d.compare(g)) { + fatal(FatalMsg() << MYNAME << ": Unsupported combination of datum '" << d << "' and grid '" << g << "''!\n"); } - xfree(d); - xfree(g); return res; } @@ -425,8 +417,7 @@ read_CTrackFile(const int version) /* S1 .. S9: comments, hints, jokes, aso */ for (int i = 0; i < 9; i++) { - char* s = read_str(fin); - xfree(s); + (void) read_str(fin); } int32_t tcount = gbfgetint32(fin); @@ -534,8 +525,8 @@ read_CTrackFile(const int version) // variants of shortname for (int32_t i = 0; i < namect; i++) { - char* name = read_str(fin); - if (name && *name) { + auto name = read_str(fin); + if (!name.isEmpty()) { switch (i) { case 0: wpt->description = name; @@ -545,7 +536,6 @@ read_CTrackFile(const int version) break; } } - xfree(name); } waypt_add(wpt); diff --git a/exif.cc b/exif.cc index 124ff4edb..9957938a9 100644 --- a/exif.cc +++ b/exif.cc @@ -547,7 +547,7 @@ exif_read_ifd(ExifApp* app, const uint16_t ifd_nr, const gbsize_t offs, QByteArray qba(tag->count, 0); gbfread(qba.data(), tag->count, 1, fin); tag->data.append(qba); - } else for (uint16_t i = 0; i < tag->count; i++) { + } else for (unsigned i = 0; i < tag->count; i++) { switch (tag->type) { case EXIF_TYPE_SHORT: case EXIF_TYPE_SSHORT: @@ -1318,7 +1318,7 @@ exif_write_ifd(ExifIfd* ifd, const char next, gbfile* fout) if (tag->size > 4) { if BYTE_TYPE(tag->type) { gbfwrite(tag->data.at(0).toByteArray().constData(), tag->size, 1, fout); - } else for (uint16_t i = 0; i < tag->count; i++) { + } else for (unsigned i = 0; i < tag->count; i++) { switch (tag->type) { case EXIF_TYPE_SHORT: case EXIF_TYPE_SSHORT: diff --git a/garmin_xt.cc b/garmin_xt.cc index 5bc151c96..b98f9fb94 100644 --- a/garmin_xt.cc +++ b/garmin_xt.cc @@ -151,7 +151,7 @@ format_garmin_xt_rd_st_attrs(char* p_trk_name, uint8_t* p_track_color) static void format_garmin_xt_decrypt_trk_blk(int Count, uint8_t TrackBlock[]) { - uint8_t j = 12; + int j = 12; while (j<(Count-1)) { for (uint8_t i = j; i < Count; i++) { TrackBlock[i] = TrackBlock[i] >> 1; @@ -274,7 +274,7 @@ format_garmin_xt_proc_strk() format_garmin_xt_decrypt_trk_blk(Count, TrackBlock); // process each track point in the loaded TrackBlock - for (uint8_t ii = 1; ii <= ((Count-1) / 12); ii++) { + for (auto ii = 1; ii <= ((Count-1) / 12); ii++) { // decompose loaded track block part (track point) format_garmin_xt_decomp_trk_blk(ii, TrackBlock, &PrevEle, &Lat, &Lon, &Time); diff --git a/gtm.cc b/gtm.cc index 4fa1ef73a..09615b898 100644 --- a/gtm.cc +++ b/gtm.cc @@ -79,20 +79,7 @@ static QString fread_string(gbfile* fd) { int len = fread_integer(fd); - - if (len == 0) { - return nullptr; - } - - char* val = (char*) xmalloc(len+1); - gbfread(val, 1, len, fd); - while (len != 0 && val[len-1] == ' ') { - len--; - } - val[len] = 0; - QString v(val); - xfree(val); - return v; + return gbfreadbuf(len, fd); } static void @@ -104,17 +91,7 @@ fread_string_discard(gbfile* fd) static QString fread_fixedstring(gbfile* fd, int len) { - char* val = (char*) xmalloc(len+1); - - gbfread(val, 1, len, fd); - while (len != 0 && val[len-1] == ' ') { - len--; - } - val[len] = 0; - QString v(val); - xfree(val); - - return v; + return gbfreadbuf(len, fd); } /* Write functions, according to specification. */ diff --git a/vitosmt.cc b/vitosmt.cc index 9823e857d..fa9288e57 100644 --- a/vitosmt.cc +++ b/vitosmt.cc @@ -69,11 +69,8 @@ static void vitosmt_read() { route_head* rte = nullptr; - struct tm tmStruct; - int serial =0; + int serial = 0; - - memset(&tmStruct, 0, sizeof(tmStruct)); /* * 24 bytes header */ @@ -128,20 +125,15 @@ vitosmt_read() auto* wpt_tmp = new Waypoint; - wpt_tmp->latitude =DEG(latrad); - wpt_tmp->longitude =DEG(lonrad); - wpt_tmp->altitude =elev; + wpt_tmp->latitude = DEG(latrad); + wpt_tmp->longitude = DEG(lonrad); + wpt_tmp->altitude = elev; - tmStruct.tm_year =timestamp[0]+100; - tmStruct.tm_mon =timestamp[1]-1; - tmStruct.tm_mday =timestamp[2]; - tmStruct.tm_hour =timestamp[3]; - tmStruct.tm_min =timestamp[4]; - tmStruct.tm_sec =(int)floor(seconds); - tmStruct.tm_isdst =-1; + wpt_tmp->SetCreationTime(QDateTime( + QDate(timestamp[0] + 2000, timestamp[1], timestamp[2]), + QTime(timestamp[3], timestamp[4]), + Qt::UTC).addMSecs(lround(seconds*1000.0))); - double usec = fmod(1000000*seconds+0.5,1000000); - wpt_tmp->SetCreationTime(mkgmtime(&tmStruct), lround(usec/1000.0)); wpt_tmp->shortname = QString::asprintf("WP%04d", ++serial); WAYPT_SET(wpt_tmp, speed, KNOTS_TO_MPS(speed)); /* meters per second */ -- 2.30.2